<?php

require_once(PASTA_SMARTY . "Cryptografa.class.php");

class Funcoes {

    private static $objCripty = null;

    public static function crypt($data) {
        return base64_encode($data);
    }

    public static function decrypt($data) {
        return base64_decode($data);
    }

    public static function getCaminhoUrl() {
        $strArea = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
        $arrArea1 = explode("?", $strArea);
        $arrArea = explode("/", $arrArea1[0]);
        $arrTratado = array();
        foreach ($arrArea as $strArea) {
            if (isset($strArea) && trim($strArea) != "") {
                $arrTratado[] = $strArea;
            }
        }
//unset($arrTratado[count($arrTratado)-1]);
        return $arrTratado;
    }

    public static function getUrl($url = "") {
        if ($url == "")
            $arrArea = self::getCaminhoUrl();
        else
            $arrArea = $url;
        array_shift($arrArea);
        return "http://" . implode("/", $arrArea) . "/";
    }

    public static function debuga() {
        $arrDados = func_get_args();
        print("<pre>");
        for ($i = 0; $i < count($arrDados); $i++) {
            print("<BR>");
            print_r($arrDados[$i]);
        }
        die();
    }

    public static function novaPasta($strCaminhoPasta) {
        $result = true;
        if (!is_dir($strCaminhoPasta)) {
            mkdir($strCaminhoPasta, 0777);
        } else {
            $result = false;
        }
        return $result;
    }

    /* exemplo de uso: chamo a função copiar passando url origem e destino respectivamente. 
     */

    public static function rrmdir($Dir_destino) {
        if (is_dir($Dir_destino)) {
            $files = scandir($Dir_destino);
            foreach ($files as $file)
                if (is_dir("$Dir_destinho / $Dir_Origem")) {
                    if ($file != "." && $file != "..")
                        self::rrmdir("$Dir_destinho/$file");
                }else {
                    if ($file != "." && $file != "..")
                        self::rrmdir("$Dir_destinho/$file");
                }
            self::rrmdir($dir);
        }else if (file_exists($dir))
            unlink($dir);
    }

    public static function copiar($src, $dst) {
        if (file_exists($dst))
            self::rrmdir($dst);
        if (is_dir($src)) {
            if (!is_dir($dst)) {
                mkdir($dst, 0777);
            }
            $files = scandir($src);
            foreach ($files as $file)
                if ($file != "." && $file != "..")
                    self::copiar("$src/$file", "$dst/$file");
        }
        else if (file_exists($src))
            copy($src, $dst);
    }

    public static function renomeiaPasta($strPastaAntiga, $strPastaNova, $strCaminhoPasta = "") {
        if (isset($strPastaAntiga) && $strPastaAntiga != "" && isset($strPastaNova) && $strPastaNova != "") {
            if (!is_dir($strCaminhoPasta . $strPastaAntiga . "/"))
                echo "Nao existe uma pasta com o nome especificado.";
            if (!rename($strCaminhoPasta . $strPastaAntiga, $strCaminhoPasta . $strPastaNova))
                echo "Não foi possível renomear a pasta.";
//Criada a pasta, gera-se a estrutura interna dela.
        }else {
            echo "Não foi passado o nome para renomear a pasta.";
        }
        return true;
    }

    public static function deletaPastaeSubpasta($strPasta, $strCaminhoPasta = "") {
        if (isset($strPasta) && $strPasta != "") {
            if (is_dir($strCaminhoPasta . $strPasta . "/")) {
                if ($ponteiro = opendir($strCaminhoPasta . $strPasta . "/")) {
                    while ($nome_itens = readdir($ponteiro)) {
                        if ($nome_itens != "." && $nome_itens != "..") {
                            if (is_dir($strCaminhoPasta . $strPasta . "/" . $nome_itens)) {
                                $pastas[] = $nome_itens;
                            } else {
                                chmod($strCaminhoPasta . $strPasta . "/" . $nome_itens, 0777);
                                unlink($strCaminhoPasta . $strPasta . "/" . $nome_itens);
                            }
                        }
                    }

                    if ($pastas[0] != "") {
                        foreach ($pastas as $pasta) {
                            self::deletaPastaeSubpasta($pasta, $strCaminhoPasta . $strPasta . "/");
                        }
                    }
                }
                closedir($ponteiro);
                rmdir($strCaminhoPasta . $strPasta . "/");
            } else {
                echo "A pasta referida não existe.";
            }
        }
    }

    public static function deletaPasta($strPasta, $strCaminhoPasta = "") {
        if (isset($strPasta) && $strPasta != "") {
            if (!is_dir($strCaminhoPasta . $strPasta . "/"))
                echo "A pasta referida não existe.";
//verifica-se se existem pastas filhas, caso tenha não será permitido deletar
            if (is_dir($strCaminhoPasta . $strPasta)) {
                if ($dh = opendir($strCaminhoPasta . $strPasta)) {
                    while (($file = readdir($dh)) !== false) {
                        if (!in_array($file, self::getArrConfigPastas()) && $file != "index.php") {
                            echo "A pasta referida não pode ser deletada por possuir pastas internas.";
                        }
                    }
                    closedir($dh);
                }
            }

            if ($dh = opendir($strCaminhoPasta . $strPasta . "/config/")) {
                while (($file = readdir($dh)) !== false) {
                    if (!is_dir($strCaminhoPasta . $strPasta . "/config/" . $file))
                        if (!unlink($strCaminhoPasta . $strPasta . "/config/" . $file))
                            echo "A pasta não pode ser alterada.";
                }
                closedir($dh);
            }
            if (!rmdir($strCaminhoPasta . $strPasta . "/config/"))
                echo "A pasta \"" . $strCaminhoPasta . $strPasta . "/config/\" não pode ser alterada.";
            if (!unlink($strCaminhoPasta . $strPasta . "/index.php"))
                echo "O arquivo \"" . $strCaminhoPasta . $strPasta . "/index.php\" não pode ser alterada.";
            chmod($strCaminhoPasta . $strPasta . "/", 755);
            if (!rmdir($strCaminhoPasta . $strPasta))
                echo "A pasta \"" . $strCaminhoPasta . $strPasta . "\" não pode ser deletada.";
        }
    }

    public static function retiraCaracterEspecial($string) {
        $a = array("á", "ã", "à", "ä", "â", "Á", "Ã", "À", "Ä", "Â");
        $string = str_replace($a, "a", $string);
        $e = array("é", "ë", "è", "ê", "É", "Ë", "È", "Ê", "&");
        $string = str_replace($e, "e", $string);
        $i = array("í", "ï", "ì", "î", "Í", "Ï", "Ì", "Î");
        $string = str_replace($i, "i", $string);
        $o = array("ó", "ö", "ò", "õ", "ô", "Ó", "Ö", "Ò", "Õ", "Ô");
        $string = str_replace($o, "o", $string);
        $u = array("ú", "ü", "ù", "û", "Ú", "Ü", "Ù", "Û");
        $string = str_replace($u, "u", $string);
        $c = array("ç", "Ç");
        $string = str_replace($c, "c", $string);
        $n = array("ñ", "Ñ");
        $string = str_replace($n, "n", $string);
        return $string;
    }

    public static function apenasCaminho($strCaminho) {
        $dados = explode("/", $strCaminho);
        unset($dados[count($dados) - 1]);
        unset($dados[count($dados) - 1]);
        for ($i = 0; $i < count($dados); $i++) {
            $result.=$dados[$i] . "/";
        }
        return $result;
    }

    public static function getPastaDoCaminho() {
        $caminhoFisico = explode("\\", getcwd());
        if (count($caminhoFisico) <= 1) {
            $caminhoFisico = explode("/", getcwd());
        }
        $pasta = $caminhoFisico[count($caminhoFisico) - 1];
        return $pasta;
    }

    public static function anti_injection($sql) {
        $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql);
        $sql = trim($sql);
        $sql = strip_tags($sql);
        $sql = addslashes($sql);
        return $sql;
    }

    public static function anti_injection_array($array) {
        foreach ($array as $i => $val) {
            $val = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $val);
            $val = trim($val);
            $val = strip_tags($val);
            $array[$i] = addslashes($val);
        }
        return $array;
    }

    public static function organizaMsgErro($m, $e) {
        $msg .="[ERRO] Hora: " . date("H:i") . " " .
                "Erro [ {$e->getCode()} ]: linha ( {$e->getLine()} ) " .
                "{$m} " .
                "{$e->getMessage()} " .
                "{$e->getFile()} " .
                "[ERRO] ";
        return $msg;
    }

    public static function processaMensagem($titulo = "Aviso", $texto, $tipoMensagem, $url = null, $amigavel = false) {
        $crypt = new Cryptografa();
        if (count($_GET) > 0) {
            $sinal = "&";
        } else {
            $sinal = "?";
        }
        if ($url) {
            $sinal = "&";
        }
        if ($amigavel) {
            $msg = "parametros/" . $crypt->crypt("msgTitulo=" . $titulo . "&msg=" . $texto . "&tipoMsg=" . $tipoMensagem) . "/";
        } else {
            $msg = $sinal . "msgTitulo=" . $crypt->crypt($titulo) . "&msg=" . $crypt->crypt($texto) . "&tipoMsg=" . $crypt->crypt($tipoMensagem);
        }
        return $msg;
    }

    public static function retiraParametroDoGet($string, $nomeParametro) {
        $strAtual = $string;
        if (strpos($string, $nomeParametro . "=")) {
            $ini = strpos($string, $nomeParametro . "=");
            $string = substr($string, $ini);


            if (strpos($string, "&")) {
                $fim = strpos($string, "&");
                $string = substr($string, 0, $fim);
            }
            $strAtual = str_replace("&" . $string, "", $strAtual);
            $strAtual = str_replace("?" . $string, "", $strAtual);
            $strAtual = substr($strAtual, 1);
            $strAtual = "?" . $strAtual;
        }
        return $strAtual;
    }

    public static function retiraParametroMsgDoGet($url) {
        $arrayUrl = explode("&", $url);
        return $arrayUrl;
    }

//organiza o array com os resultados vindos do banco em sequência.
//impedindo que fique array dentro de array
//serve apenas para quando houver um segundo array dentro do primeiro.
    public static function colocaValoresEmSequenciaAposUmSelect($array = null) {
        $arrResult = Array();
        if (!empty($array)) {
            foreach ($array as $i => $valor) {
                $arrResult[] = $valor[0];
            }
        }
        return $arrResult;
    }

    public static function decodificaParamGet($param) {
        if (!empty($param)) {
            $param = self::getObjCripty()->decrypt($param);
            $dados = explode("&", $param);
            foreach ($dados as $valor) {
                $arrayAux[] = explode("=", $valor);
            }
            foreach ($arrayAux as $valor) {
                $arrayGet[$valor[0]] = $valor[1];
            }
        } else {
            $arrayGet = null;
        }
        return $arrayGet;
    }

    public static function validaPost($post) {
//Funcoes::debuga($post);
        $post = self::validaDatasBd($post);
        return $post;
    }

    public function validaDatasBd($post) {
        if (!empty($post["data"])) {
            $post["data"] = Funcoes::parseDataBanco($post["data"]);
        }
        if (!empty($post["data_ini"])) {
            $post["data_ini"] = Funcoes::parseDataBanco($post["data_ini"]);
        }
        if (!empty($post["data_fim"])) {
            $post["data_fim"] = Funcoes::parseDataBanco($post["data_fim"]);
        }
        if (!empty($post["data_aniversario"])) {
            $post["data_aniversario"] = Funcoes::parseDataBanco($post["data_aniversario"]);
        }
        if (!empty($post["data_validade"])) {
            $post["data_validade"] = Funcoes::parseDataBanco($post["data_validade"]);
        }
        return $post;
    }

    public static function validaDatasPt($post) {
        if (!empty($post["data"])) {
            $post["data"] = Funcoes::parseDataPt($post["data"]);
        }
        if (!empty($post["data_ini"])) {
            $post["data_ini"] = Funcoes::parseDataPt($post["data_ini"]);
        }
        if (!empty($post["data_fim"])) {
            $post["data_fim"] = Funcoes::parseDataPt($post["data_fim"]);
        }
        if (!empty($post["data_aniversario"])) {
            $post["data_aniversario"] = Funcoes::parseDataPt($post["data_aniversario"]);
        }
        if (!empty($post["data_validade"])) {
            $post["data_validade"] = Funcoes::parseDataPt($post["data_validade"]);
        }
        return $post;
    }

    public static function organizaParamGet($param) {
        foreach ($param as $valor) {
            $arrayAux[] = explode("=", $valor);
        }
        if (is_array($arrayAux)) {
            foreach ($arrayAux as $valor) {
                $arrayGet[$valor[0]] = $valor[1];
            }
        } else {
            $arrayGet = null;
        }

        return $arrayGet;
    }

    public static function montaGetDeLinkCriptografado($param) {
        $param = self::getObjCripty()->decrypt($param);

        $arrayAux = explode("&", $param);
        foreach ($arrayAux as $valor) {
            $aux = explode("=", $valor);
            $result[$aux[0]] = $aux[1];
        }
        return $result;
    }

    public static function retirarParametrosMSgDoGet($params) {
        $keys = array_keys($params);
        foreach ($keys as $v) {
            if ($v != "param" && $v != "json" && $v != "tipoMsg" && $v != "msg" && $v != "msgTitulo" && $v != "_") {
                $arrayKeys[] = $v;
            }
        }
        foreach ($arrayKeys as $i => $valor) {
            if ($i == 0) {
                $codigo = null;
            } else {
                $codigo = "&" . $valor . "=";
            }
            $link.=$codigo . $params[$valor];
        }
        return $link;
    }

    public static function getObjCripty() {
        if (Funcoes::$objCripty == null)
            Funcoes::$objCripty = new Cryptografa();
        return Funcoes::$objCripty;
    }

    public static function parseDataBanco($data) {
        if (!ereg("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $data))
            return null;
        $newDate = explode("/", $data);
        if (count($newDate) != 3)
            return null;
        return $newDate[2] . "-" . $newDate[1] . "-" . $newDate[0];
    }

    public static function parseDataPt($data) {
        $newDate = self::getArrData($data);
        return $newDate[2] . "/" . $newDate[1] . "/" . $newDate[0];
    }

    public static function getArrData($data) {
        if (!ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $data))
            return null;
        $newDate = explode("-", $data);
        if (count($newDate) != 3)
            return null;
        return $newDate;
    }

    function ValidaData($dat) {
        $data = explode("/", "$dat"); // fatia a string $dat em pedados, usando / como referência
        $d = $data[0];
        $m = $data[1];
        $y = $data[2];
        $res = checkdate($m, $d, $y);
        if ($res == 1) {
            return true;
        } else {
            return false;
        }
    }

    public static function preparaDadosFormTipoTela($arrDados, $registro, $smarty) {
        if (!empty($registro)) {
            $smarty->assign("PARAMS", "?p=" . self::getObjCripty()->crypt("idReg=" . $registro));
        }
        $fields = array_keys($arrDados);
        $values = array_values($arrDados);
        foreach ($fields as $i => $vl) {
            $smarty->assign($vl, $values[$i]);
        }
    }

    public static function getCaminhoMigalha() {
        $arrTratado = Funcoes::getCaminhoUrl();
        $nomePastaAtual = Funcoes::getPastaDoCaminho();
        $add = false;
        $y = 0;
        foreach ($arrTratado as $i => $area) {
            if ($add) {
                $migalha[$y]["area"] = $area;
                $url.=$area . "/";
                $migalha[$y]["link"] = URL_PASTA_SITE . $url;
                $y++;
            }
            if ($area == PASTA_SITE) {
                $add = true;
            }
            if ($area == $nomePastaAtual) {
                break;
            }
        }
        return $migalha;
    }

    public static function getUrlAtualLimpa() {
        return "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
    }

    public static function parseHexToRGB($hex) {
        $hex = ereg_replace("#", "", $hex);
        $color = array();

        if (strlen($hex) == 3) {
            $color['r'] = hexdec(substr($hex, 0, 1) . $r);
            $color['g'] = hexdec(substr($hex, 1, 1) . $g);
            $color['b'] = hexdec(substr($hex, 2, 1) . $b);
        } else if (strlen($hex) == 6) {
            $color['r'] = hexdec(substr($hex, 0, 2));
            $color['g'] = hexdec(substr($hex, 2, 2));
            $color['b'] = hexdec(substr($hex, 4, 2));
        }

        return $color;
    }

    public static function parseHexToRGBStr($hex) {
        $hex = ereg_replace("#", "", $hex);

        if (strlen($hex) == 3) {
            $color.= hexdec(substr($hex, 0, 1) . $r);
            $color.= "," . hexdec(substr($hex, 1, 1) . $g);
            $color.= "," . hexdec(substr($hex, 2, 1) . $b);
        } else if (strlen($hex) == 6) {
            $color.= hexdec(substr($hex, 0, 2));
            $color.= "," . hexdec(substr($hex, 2, 2));
            $color.= "," . hexdec(substr($hex, 4, 2));
        }

        return $color;
    }

    public static function parseRGBToHex($r, $g, $b) {
        //String padding bug found and the solution put forth by Pete Williams (http://snipplr.com/users/PeteW)
        $hex = "#";
        $hex.= str_pad(dechex($r), 2, "0", STR_PAD_LEFT);
        $hex.= str_pad(dechex($g), 2, "0", STR_PAD_LEFT);
        $hex.= str_pad(dechex($b), 2, "0", STR_PAD_LEFT);

        return $hex;
    }

    public static function montaParametrosEmail($nome_destinatario, $email_destinatario, $nome_remetente, $email_remetente, $assunto, $mensagem, $is_html = false) {
        $dadosEmail['nome_destinatario'] = $nome_destinatario;
        $dadosEmail['email_destinatario'] = $email_destinatario;
        $dadosEmail['nome_remetente'] = $nome_remetente;
        $dadosEmail['email_remetente'] = $email_remetente;
        $dadosEmail["assunto"] = $assunto;
        $dadosEmail["mensagem"] = $mensagem;
        $dadosEmail['is_html'] = $is_html;
        return $dadosEmail;
    }

    public static function enviaEmail($dadosEmail) {
// Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer
        require(PASTA_PHPMAILER . "class.phpmailer.php");

        $erros = "";

        if (empty($dadosEmail['nome_destinatario'])) {
            $erros .= "O nome deve ser preenchido.";
        }

        if (empty($dadosEmail['email_destinatario'])) {
            $erros .= "O E-mail deve ser preenchido.";
        } else {
            $email = $dadosEmail['email_destinatario'];
            eregi("([\._0-9A-Za-z-]+)@([0-9A-Za-z-]+)(\.[0-9A-Za-z\.]+)", $email, $match);
            if (!isset($match)) {
                $erros .= "O e-mail informado é inválido.";
            }
        }

        if (empty($dadosEmail['mensagem'])) {
            $erros .= "A mensagem deve ser preenchida.";
        }

        if (empty($erros)) {

            $phpmail = new PHPMailer();
            $phpmail->IsSMTP(); // envia por SMTP
            $phpmail->SMTPSecure = "tls";
            $phpmail->Host = SMTP_SERV_HOST; // SMTP servers
            $phpmail->Port = SMTP_SERV_PORTA; // SMTP servers
            $phpmail->SMTPAuth = SMTP_AUTH; // Caso o servidor SMTP precise de autenticação
            $phpmail->Username = SMTP_SERV_USER; // SMTP username
            $phpmail->Password = SMTP_SERV_PASS; // SMTP password

            $phpmail->IsHTML($dadosEmail['is_html']);

            $phpmail->From = $dadosEmail['email_remetente'];
            $phpmail->FromName = $dadosEmail['nome_remetente'];

            $phpmail->AddAddress($email);
            $phpmail->Subject = $dadosEmail['assunto'];
            $phpmail->Body = $dadosEmail['mensagem'];

            //Funcoes::debuga($phpmail);
            $send = $phpmail->Send();

            if ($send) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public static function enviaEmailArrayDest($dadosEmail) {
// Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer
        require(PASTA_PHPMAILER . "class.phpmailer.php");

        $erros = "";

        if (empty($erros)) {

            $phpmail = new PHPMailer();
            $phpmail->IsSMTP(); // envia por SMTP
            $phpmail->SMTPSecure = "tls";
            $phpmail->Host = SMTP_SERV_HOST; // SMTP servers
            $phpmail->Port = SMTP_SERV_PORTA; // SMTP servers
            $phpmail->SMTPAuth = SMTP_AUTH; // Caso o servidor SMTP precise de autenticação
            $phpmail->Username = SMTP_SERV_USER; // SMTP username
            $phpmail->Password = SMTP_SERV_PASS; // SMTP password

            $phpmail->IsHTML($dadosEmail['is_html']);

            $phpmail->From = $dadosEmail['email_remetente'];
            $phpmail->FromName = $dadosEmail['nome_remetente'];

            foreach ($dadosEmail["email_destinatario"] as $dest) {
                $phpmail->AddAddress($dest);
            }
            $phpmail->Subject = $dadosEmail['assunto'];
            $phpmail->Body = $dadosEmail['mensagem'];

            //Funcoes::debuga($phpmail);
            $send = $phpmail->Send();

            if ($send) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Função para gerar um código único que nunca vai se repetir.
     * @author Fernando Braga <fernando.bs.dark@hotmail.com>
     * @since 3.0 09/07/2013 
     * @return String //um código único.
     */
    public static function gerarCodigoUnicoMd5() {
        usleep(100);
        $codigo = str_replace(" ", "", str_replace(".", "", date("dmYHis") . microtime()));
        return md5($codigo);
    }

    public static function gerarCodigoUnico() {
        usleep(100);
        $codigo = str_replace(" ", "", str_replace(".", "", date("dmYHis") . microtime()));
        return $codigo;
    }

    /**
     * Função para gerar senhas aleatórias
     *
     * @author    Thiago Belem <contato@thiagobelem.net>
     *
     * @param integer $tamanho Tamanho da senha a ser gerada
     * @param boolean $maiusculas Se terá letras maiúsculas
     * @param boolean $numeros Se terá números
     * @param boolean $simbolos Se terá símbolos
     *
     * @return string A senha gerada
     */
    public static function gerarSenha($tamanho = 8, $maiusculas = true, $numeros = true, $simbolos = false) {
        $lmin = 'abcdefghijklmnopqrstuvwxyz';
        $lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $num = '1234567890';
        $simb = '!@#$%*-';
        $retorno = '';
        $caracteres = '';

        $caracteres .= $lmin;
        if ($maiusculas)
            $caracteres .= $lmai;
        if ($numeros)
            $caracteres .= $num;
        if ($simbolos)
            $caracteres .= $simb;

        $len = strlen($caracteres);
        for ($n = 1; $n <= $tamanho; $n++) {
            $rand = mt_rand(1, $len);
            $retorno .= $caracteres[$rand - 1];
        }
        return $retorno;
    }

    public static function validaCaptcha($code) {
        session_start();
        if (md5($code) == $_SESSION["palavra"]) {
            return true;
        } else {
            return false;
        }
    }

    public static function limpaDataCadastro($data) {
        $data = str_replace(" ", "", str_replace("-", "", str_replace(":", "", $data)));
        return $data;
    }

    public static function comparaStringSensitive($str1, $str2) {
        //comparacao case sensitive
        if (strcmp($str1, $str2) != 0) {
            return false;
        } else {
            return true;
        }
    }

    public static function comparaStringInsensitive($str1, $str2) {
        //comparacao case insensitive
        if (strcasecmp($str1, $str2) == 0) {
            return true;
        } else {
            return false;
        }
    }

    public static function parsePostSession($post, $nome_sessao) {
        session_start();
        $_SESSION[$nome_sessao] = $post;
    }

    public static function destroiPostSession($nome_sessao) {
        session_start();
        unset($_SESSION[$nome_sessao]);
    }

    public static function executa_funcao_externa($url) {
        $cURL = curl_init();
        curl_setopt($cURL, CURLOPT_URL, $url);
        curl_setopt($cURL, CURLOPT_AUTOREFERER, true);
        curl_setopt($cURL, CURLOPT_COOKIE, $strCookie);
        curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($cURL, CURLOPT_POST, true);
        curl_setopt($cURL, CURLOPT_TIMEOUT, 20);
        curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($cURL, CURLOPT_HEADER, false);
        curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($cURL, CURLOPT_POSTFIELDS, $_POST);
        curl_exec($cURL);
        curl_close($cURL);
    }

    function redireciona($link) {
        if ($link == -1) {
            echo" <script>history.go(-1);</script>";
        } else {
            echo" <script>document.location.href='$link'</script>";
        }
    }

    public function getCondicaoBuscar($strCampos, $busca) {
        $strCampos = explode(",", $strCampos);

        foreach ($strCampos as $i => $row) {
            if ($i > 0) {
                $oper = " OR ";
            } else {
                $oper = "";
            }
            $condicao.=$oper . " (" . $row . " like '%" . $busca . "%') ";
        }

        return $condicao;
    }

    public function preparaColunas($string) {
        $string = explode(",", $string);
        $html = "<thead>
            <tr>
            ";
        foreach ($string as $row) {
            $html.="<th>" . strtoupper($row) . "</th>";
        }
        $html.="<tr>
            </thead>
            ";
        return $html;
    }

    public static function gerarTabelaSimples($array, $paranslinks = null, $strColunas = null, $class_coluna_acoes = null) {

        $string = "<table class='table table-striped tabelaPadrao'>";
        $string.= self::preparaColunas($strColunas);
        $string.="<tbody>";
        foreach ($array as $i => $row) {
            $string.= "<tr>";
            $row = array_values($row);
            //funcoes::debuga($row);
            foreach ($row as $j => $col) {
                $string.="<td> <span style='color:#6d7275;'>" . $col . "</span> </td>";
            }
            $string.= "<td class='" . $class_coluna_acoes . "'><table class='subTabela'><tr>";
            foreach ($paranslinks as $l => $link) {
                if ($link['tipo_link'] == "fancybox") {
                    $paramFuncao = Funcoes::crypt("imprimiConteudoEspecifico:".$link['link']."&idreg=" . $row[0]);
                    $string.="<td > <a class='cls_a_" . str_replace(" ", "", $link['txt']) . "'  style='text-decoration: none;' href='" . URL . "EncaminhaAjax.class.php?param=" . $paramFuncao . "'>" . "<img src='" . $link['img'] . "' title='" . $link['txt'] . "' alt='" . $link['txt'] . "' width='18' height='18'/></a></td>";
                } else {
                    if ($link['txt'] == "Excluir") {
                        $string.="<td > <a  style='text-decoration: none;' class='cls_a_" . $link['txt'] . "'  onclick='return del(" . '"' . URL_SITE_ATUAL . $link['link'] . $row[0] . '/"' . ");' href='#'>" . "<img src='" . $link['img'] . "' title='" . $link['txt'] . "' alt='" . $link['txt'] . "' width='18' height='18'/></a></td>";
                    } else {
                        $string.="<td > <a class='cls_a_" . $link['txt'] . "'  style='text-decoration: none;' href='" . URL_SITE_ATUAL . $link['link'] . $row[0] . "/'>" . "<img src='" . $link['img'] . "' title='" . $link['txt'] . "' alt='" . $link['txt'] . "' width='18' height='18'/></a></td>";
                    }
                }
            }
            $string.= "</table></tr></td>";
            $string.="</tr>";
        }
        $string.="<tbody></table><hr>";

        return $string;
    }

    public function getPaginacaoLimite($pag, $limite) {
        $pag = filter_var($pag, FILTER_VALIDATE_INT);

        $inicio = 0;

        if ($pag != '') {
            $inicio = ($pag - 1) * $limite;
        }
        $str = " LIMIT " . $inicio . "," . $limite;

        return $str;
    }

    public function getFerramentaBuscaTabela($busca = null,$txt_insercao="Cadastrar") {
        $ferramentaBusca = "<div class='span12'><hr>
                <div class='padding5px input-append pull-left'>
                <a class='linkImgCad' style='text-decoration: none;' href='" . URL_SITE_ATUAL . "acao/incluir/'>" . "<img  src='" . URL_PASTA_IMAGENS . "icones_grandes/cadastrar.png' title='".$txt_insercao."' alt='".$txt_insercao."' width='40' height='40'/> ".$txt_insercao." </a>
                </div>
                <div class='input-append pull-right'>
                <input class='span8' id='buscar' name='buscar' type='text' value='" . $busca . "'>
                <a class='btn' href='#' onclick='valueBuscar();'>Buscar</a>
                </div>
                </div>";

        return $ferramentaBusca;
    }

    public function getPaginacao($pag, $total, $limite, $paramList) {
        //Funcoes::debuga($pag);
        if (empty($pag)) {
            $prox = 2;
        } else {
            $prox = $pag + 1;
        }

        $ant = $pag - 1;

        $ultima_pag = ceil($total / $limite);

        $penultima = $ultima_pag - 1;

        $adjacentes = 2;

        return self::getPaginacaoNumeracao($ultima_pag, $pag, $adjacentes, $penultima, $prox, $ant, $paramList, $total);
    }

    public function getPaginacaoNumeracao($ultima_pag, $pag, $adjacentes, $penultima, $prox, $ant, $paramList, $total = null) {
        $paginacao .='<div class="span9 offset0">
                <div class="container-fluid">
                <span class="negrito font-size10px margin0">' . $total . ' registro(s) encontrado(s)</span>
                    <div class="pagination pagination-left">
                        <ul>';
        if (!empty($pag) && $pag > 1) {
            $paginacao .= '<li><a  href="' . URL_SERVER_ATUAL . $paramList . '/">Primeira</a></li>';
            $paginacao .= '<li><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $ant . '/">Anterior</a></li>';
        } else {
            $paginacao .= '<li><a class="desabilita"  onclick="return false">Primeira</a></li>';
            $paginacao .= '<li><a class="desabilita"  onclick="return false">Anterior</a></li>';
        }
        if ($ultima_pag > 5) {
            if ($pag < 1 + (2 * $adjacentes)) {
                for ($i = 1; $i < 2 + (2 * $adjacentes); $i++) {
                    if ($i == $pag) {
                        $paginacao .= '<li class="active"><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    } else {
                        $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    }
                }
                $paginacao .= '<li><a>...</a></li>';
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $penultima . '/">' . $penultima . '</a></li>';
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $ultima_pag . '">' . $ultima_pag . '</a></li>';
            } elseif ($pag > (2 * $adjacentes) && $pag < $ultima_pag - 3) {
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/1/">1</a></li>';
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/1/">2</a></li> <li><a>...</a></li>';
                for ($i = $pag - $adjacentes; $i <= $pag + $adjacentes; $i++) {
                    if ($i == $pag) {
                        $paginacao .= '<li class="active"><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    } else {
                        $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    }
                }
                $paginacao .= '<li><a>...</a></li>';
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $penultima . '/">' . $penultima . '</a></li>';
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $ultima_pag . '">' . $ultima_pag . '</a></li>';
            } else {
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/1/">1</a></li>';
                $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/1/">2</a></li> <li><a>...</a></li>';
                for ($i = $ultima_pag - (4 + (2 * adjacentes)); $i <= $ultima_pag; $i++) {
                    if ($i == $pag) {
                        $paginacao .= '<li class="active"><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    } else {
                        $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    }
                }
            }
        } else {
            if ($ultima_pag <= 5) {
                for ($i = 1; $i < $ultima_pag + 1; $i++) {
                    if ($i == $pag) {
                        $paginacao .= '<li class="active"><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    } else {
                        $paginacao .= '<li><a href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $i . '/">' . $i . '</a></li>';
                    }
                }
            }
        }
        if ($pag < $ultima_pag) {
            $paginacao .= '<li><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $prox . '/">Próxima</a></li>';
            $paginacao .= '<li><a  href="' . URL_SERVER_ATUAL . $paramList . '/pag/' . $ultima_pag . '/">Última</a></li>';
        } else {
            $paginacao .= '<li><a class="desabilita"  onclick="return false">Próxima</a></li>';
            $paginacao .= '<li><a class="desabilita"  onclick="return false">Última</a></li>';
        }
        $paginacao .='</ul>
                    </div>
                </div>
            </div>';
        return $paginacao;
    }

}

?>
